package com.api.test;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.Date;

import org.apache.commons.codec.binary.Base64;

import com.bin.common.utils.DateTimeUtils;
import com.bin.common.utils.StringUtils;
import com.huitone.smspfm.socket.utils.SerialUtils;
import com.huitone.smspfm.socket.client.SocketClient;
import com.huitone.smspfm.socket.core.ClientServerUserChecker;
import com.huitone.smspfm.socket.protocol.sgip.constant.CommandID;
import com.huitone.smspfm.socket.protocol.sgip.constant.Constant;
import com.huitone.smspfm.socket.protocol.sgip.message.msgbody.Deliver;
import com.huitone.smspfm.socket.protocol.sgip.message.msgbody.Submit;
import com.huitone.smspfm.socket.protocol.sgip.message.msghead.Head;
import com.huitone.smspfm.socket.server.SocketServer;



/**
* @Title ClientSample.java
* @Package com.api.test
* @Description 本例子主要展示客户端的使用方式
* @author ybliang
* @date 2017年4月25日 下午4:34:23
* @version V1.0
*/
public class OldClient {

	public static void main(String[] args) throws IOException {

//		String path1 = "d:\\smstest\\oldreport\\recv1.tmp";
//		File myfile = new File(path1);
//		BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(myfile));
//		out.write("test0001- 2 ".getBytes());
//		out.flush();
//		out.close();
//		System.out.println(myfile.renameTo(new File(myfile.getParent()+File.separator+"recv_201808161724593890002.xml")));
		
		
		// 需要为客户端设置配置参数
		
		String pawd = new String(Base64.encodeBase64String("123456".getBytes()));
		String passwd = new String(Base64.decodeBase64("77+9be+/ve+/vQ=="));
		System.out.println(passwd);
//MTIzNDU2
		System.out.println(pawd);
		
		SocketClient.getInstance().setMessageHandler(new ClientMessageHandler())
			.setServerIp("127.0.0.1") // 短信平台的IP地址 (短信平台接口地址)
			.setServerPort(9901) // 短信平台的端口号
			.setLoginName("test")  // 用户名 (短信平台分配)
			.setLoginPassword("123456") // 密码 (短信平台分配)
			.setSrvNode("20313") // 业务端编码 (短信平台分配)
			.setCoderule(100002); // 业务端编号规则(短信平台分配)
		
		/*
		 * 该客户端功能和SocketClient一样，但是允许创建多个
		 * SmsClient client = new SmsClient();
		client.setSrvNode("100004");
		client.setServerIp("127.0.0.1");
		client.setServerPort(8901);
		client.setLoginName("test");
		client.setLoginPass("123456");
		client.setMessageHandler(new com.huitone.smspfm.socket.core.handler.DefaultMessageHandler());
		client.setMaxSize(1000);
		client.bind();*/
		
		String path = "C:\\Users\\Administrator\\Desktop\\charText1.txt";
		File f = new File(path);
		BufferedReader in = null;
		StringBuffer sb = new StringBuffer();
		
		try {
			in = new BufferedReader(new InputStreamReader(
					new FileInputStream(path), "UTF-8"));
			String str = "";
			while ((str = in.readLine()) != null) {
				if(!"".equals(str) && ! System.lineSeparator().equals(str)){ 
					sb.append(str);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		int count = 0;
		while(count < 5) {
			
			Deliver submit = Deliver.build("27604",
					"8080", 
					"15644664041",
					DateTimeUtils.dateToStr(new Date(), "MMddHHmmss"), 
					Constant.MessageCodingE.GBK.getValue(), sb.toString());
		
//			// 构造下发短信消息体
//			Submit submit = Submit.build(Collections.singletonList("15644664041"), //用户号码,最多一百个
//					"27604", // 业务端编码 (短信平台分配)
//					"sd", // 业务类型编码 (短信平台分配)
//					"8080", // 发送端口号 (短信平台分配)
//					1, // 有三个可选项: 0 该条消息只有最后出错时要返回状态报告; 1 该条消息无论最后是否成功都要返回状态报告; 2-该条消息不需要返回状态报告
//					Constant.MessageCodingE.GBK.getValue(), // 默认
//					Constant.MessageTypeE.SMS.getValue(), // 默认
//					sb.toString()); // 短信内容
			//ActiveTest activeTest = new ActiveTest();
			// 构造下发短信消息头
			Head head = Head.build(submit.length(), // 短信消息体长度
					CommandID.SGIP_DELIVER,
					100002,// 业务端编号规则 (短信平台分配)
					StringUtils.tolong(DateTimeUtils.dateToStr(new Date(), "MMddHHmmss")), // 时间
					SerialUtils.getSerial()); // 序号从零到Integer.MAX_VALUE循环使用
			
			// 发送短信
			
			System.out.println(SocketClient.getInstance().sendDeliver(head, submit));
			
			try {
				Thread.sleep(0);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
			count ++;
		}
	}
}
